#ifndef __PID_H
#define __PID_H

#include <stdbool.h>
#include <stdint.h>
#include "bsp_motor.h"

#define PID_MotorMAXOUT      100-1

/* PID模式 */
typedef enum {
    POSITION_PID = 0,  // 位置式
    DELTA_PID,         // 增量式
} PID_Mode_t;

/* PID参数结构体 */
typedef struct {
    float target;	
    float now;
    float error[3];// 记录前两次及当前误差
    float p, i, d;
    float pout, dout, iout;
    float out;
    uint8_t pid_mode;
} PID_t;

/* 外部函数 */
void PID_Init(PID_t *pid, uint8_t mode, float p, float i, float d);
void PID_Cal(PID_t *pid);
float PID_MotorCal(PID_t *pid, float target, float now);


#endif

